
    <html lang="zh-cn">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
    <link href="F:\v_awjliu\BKDocs\ZH/default.css" rel="stylesheet">
    </head>
    <body>
    <h1 id="_1">产品简介</h1>
<h2 id="_2">产品概述</h2>
<p>作业平台（Job）是一套基于蓝鲸智云管控平台 Agent 管道之上，提供基础操作的原子平台；具备上万台并发处理能力，除了支持脚本执行、文件拉取 / 分发、定时任务等一系列基础运维场景以外，还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程；而每个任务都可做为一个原子节点，提供给上层或周边系统/平台使用，实现跨系统调度自动化。</p>
<h2 id="_3">功能特性</h2>
<table><tbody>
<tr style="font-weight:bold;"><td width="15%" > 菜单  </td><td width="15%">   功能名称    </td><td width="70%">   功能说明    </td></tr>
<tr><td>    首页  </td><td>   -   </td><td>   通过对业务配置异常分析给出提醒和明细列表，提供便捷的收藏作业、以及近期执行的操作入口。 </td></tr>
<tr><td rowspan="2" style="vertical-align:middle;"> 快速执行    </td><td>   执行脚本    </td><td>   可通过手动编写、本地上传，或引用业务/公共脚本的方式进行批量脚本执行。 </td></tr>
<tr><td style="vertical-align:middle;"> 分发文件    </td><td>   支持本地上传或从服务器上选择源文件两种方式，满足"一对多"、"多对多"、"多对一"等多种分发文件场景，且能自由控制上传/下载的速率和超时。   </td></tr>
<tr><td rowspan="7" style="vertical-align:middle;"> 业务管理    </td><td style="vertical-align:middle;">    作业  </td><td>   提供作业编排功能，支持用户将多个脚本执行、文件分发或人工确认步骤组装成作业模板，并按使用场景衍生多个对应的执行方案；提供调试功能来满足作业调试场景，支持使用标签对作业进行分类管理。  </td></tr>
<tr><td style="vertical-align:middle;">执行方案</td><td> 汇总展示所有作业的执行方案列表 </td></tr>
<tr><td style="vertical-align:middle;">脚本</td><td> 提供脚本的版本管理功能，包括版本增删改查、版本日志、版本对比、版本状态变更（上线/下线/禁用）等。 </td></tr>
<tr><td style="vertical-align:middle;">定时</td><td> 支持将作业执行方案设置成单次或周期执行的定时任务。 </td></tr>
<tr><td style="vertical-align:middle;">执行历史</td><td> 记录所有通过作业平台页面或 API 调用的方式发起的脚本执行、文件分发、作业和定时任务操作信息，提供任务重做和日志回溯的能力。 </td></tr>
<tr><td>    账号  </td><td>   提供在执行脚本或分发文件时所需的服务器账户的管理和维护功能。  </td></tr>
<tr><td style="vertical-align:middle;"> 消息通知    </td><td>   支持用户根据执行任务的状态发送消息通知，包括脚本执行/文件分发/作业执行的成功或失败状态，帮助用户及时得知任务的执行情况。   </td></tr>
<tr><td rowspan="3" style="vertical-align:middle;"> 平台管理    </td><td>   公共脚本    </td><td>   功能与业务的脚本管理相同，但公共脚本面向的是整个作业平台所有业务，满足提供公共需求的脚本使用场景。   </td></tr>
<tr><td style="vertical-align:middle;"> IP 白名单  </td><td>   用于满足跨业务传输文件或执行脚本的场景（未来将下架，通过配置平台的「业务集」模式来满足） </td></tr>
<tr><td style="vertical-align:middle;"> 全局设置    </td><td>   作业平台管理员功能，支持配置消息通知渠道、通讯黑名单、历史数据存储策略、账号命名规则和高危语句规则设置。    </td></tr>
</tbody></table><h1 id="_1">产品优势</h1>
<p>作业平台是蓝鲸平台底层最基础/夯实的原子平台，承载了腾讯游戏数年的海量自动化运维场景的经验沉淀，</p>
<p>「<strong>稳定、高效</strong>」是它的代言词！您可以放心的把运维基础操作场景交给它，定会不负众望的给你一个满意的答卷！</p>
<h2 id="_2">与生俱来的跨云管控能力</h2>
<p>基于蓝鲸管控平台多云联网能力，作业平台与生俱来就 <strong>支持跨多云区域</strong> 执行脚本和分发文件的场景；</p>
<p>解决企业服务器分布在多个云区域、但需要统一管理维护的刚需！</p>
<h2 id="_3">稳定、高效的海量执行能力</h2>
<p>仅需一个蓝鲸 Agent，就可以通过作业平台实现 <strong>万台服务器的并发执行</strong> 操作；</p>
<p>把运维基础操作自动化的职责交给它，企业可以毫无顾忌的专注扩展业务体量，无需担忧后端的运营支撑问题。</p>
<h2 id="_4">文件传输更强大、灵活</h2>
<p>作业平台在应对大批量、大容量的文件分发场景显得格外得心应手，这得益于它是基于 Agent 使用 <strong>BT（BitTorrent）协议</strong> 实现的；这种 P2P 模式在处理大文件有天然的优势，可以充分利用点对点来共享资源，从而达到文件快速分发的效果，并且还支持断点续传。</p>
<h2 id="_5">完善的脚本版本管理</h2>
<p>云化脚本版本管理模式，贴合现代化开放协同的理念，协作者之间借助平台便捷的共享脚本资源；</p>
<p>利用版本管理功能，您可以很好的控制版本的上/下线状态，并能够在出安全漏洞时快速禁用、及时止损！</p>
<h2 id="_6">作业编排，一切皆场景</h2>
<p>当一个操作场景需要多个步骤串联执行时，如果手工一个个去点击执行，那么效率实在太低了！并且，也没办法很好的沉淀下来，方便后续持续使用和维护。</p>
<p>作业平台的作业管理功能很好的解决了这个问题，用户可以在「作业模板」中配置好相应的执行步骤，然后再根据需求场景衍生对应的「执行方案」；</p>
<p>如此，即清晰的区分开作业模板和实例的关系，避免强耦合关系，也便于后续对使用场景的管理和维护。</p>
<h2 id="cron">原汁原味的 Cron 定时任务</h2>
<p>保留了 Linux 原生的 Crontab 定时任务使用习惯，让运维同仁能够更平滑、快速的上手；</p>
<p>更有贴心的监测功能助您发现及时掌握定时任务的动向和执行情况。</p>
<h2 id="api">API 开放，“连接”助力生态</h2>
<p>作业平台开放了 API 接口，以原子节点的形态开放提供给其它系统或平台进行调度，让 <strong>生态</strong>「<strong>连接</strong>」更淋漓尽致！</p><h1 id="_1">基本概念</h1>
<p>本文为大家介绍蓝鲸作业平台特有的一些术语和基本概念。</p>
<h2 id="_2">作业</h2>
<p>为完成发布变更、巡检、初始化等方面的既定任务而定制的执行流程；</p>
<p>在作业平台中，作业分为 <strong>模板</strong> 和 <strong>执行方案</strong>，两者是 <strong>一对多</strong> 的关系；</p>
<p>即，一个作业模板可以生成多个执行方案，执行方案可以理解是从模板衍生出来的、跟使用场景强关联的作业实例。</p>
<h2 id="_3">全局变量</h2>
<p>面向单个作业模板/执行方案全局使用的变量，用户可以根据场景需要选择相应类型的变量；</p>
<p>如果从「工具文化」的角度来看 <strong>作业就好比一台电风扇，全局变量就是功能按钮，作业步骤就是扇叶/磁铁/轴等风扇部件</strong> 风扇会把它能提供的能力以 <strong>功能按钮</strong> 的方式展示在最外层，</p>
<p>目的是为了让用户看到功能按钮时就对该电风扇的能力一目了然！作业亦是如此，你的作业提供了什么能力、可以怎么使用等等，通过赋予不同的变量值就能满足，用户一看全局变量就能知晓，而无需去一个个的查看作业步骤；</p>
<p>这，就是工具文化的思想！</p>
<h2 id="_4">定时任务</h2>
<p>类似 Linux 的 Crontab，可以设置周期性的执行任务，作业平台还额外支持了「单次执行」的定时策略；</p>
<p>并且根据使用场景提供了定时开始和结束的消息提醒功能，帮助用户更及时的掌握任务执行的情况。</p>
<h2 id="_5">公共脚本</h2>
<p>在作业平台中，普通业务都会有属于自己的脚本管理空间；而公共脚本就如同它的名称一样，是以「公共」形态面向所有平台上的业务/用户的，它满足了多业务有共性场景脚本需要统一管理和共享的需求。</p>
<h2 id="ip">IP 白名单</h2>
<p>由于作业平台中业务之间是逻辑隔离的，即你只能执行指定业务下的关联脚本/作业或主机，不允许资源或目标是跨业务的；</p>
<p>但当用户是平台业务维护场景时，就需要跨业务传文件/执行任务，这是就需要将业务外的主机加入 IP 白名单来实现。</p>
<p>（该功能未来会通过配置平台的「业务集」来提供，届时 IP 白名单功能会在迁移后下架）</p><h1 id="_1">产品架构</h1>
<p><img alt="image-20201104210927590" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Introduction/media/Product-architecture-diagram.png" /></p><h1 id="1">1. 创建系统账号</h1>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">无</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>前往 <strong>业务管理 - 账号</strong> 点击 <code>新建</code> 按钮</li>
</ol>
<p><img alt="image-20200331223738342" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200331223738342.png" /></p>
<ol>
<li><strong>填写账号信息</strong></li>
</ol>
<p><img alt="image-20200331223410780" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200331223410780.png" /></p>
<ul>
<li>
<p>用途</p>
<p>作业平台支持管理 <code>系统账号</code> 和 <code>数据库账号</code></p>
</li>
<li>
<p>类型</p>
<p>对于系统账号，又分为 <code>Linux账号</code> 或 <code>Windows账号</code></p>
</li>
<li>
<p>名称</p>
<p>名称就是对应的服务器上真实的执行账号名（如：root、Administrator、user00 等等）</p>
</li>
<li>
<p>别名</p>
<p>因为不同服务器相同名称的账号可能会存在不同密码的情况，所以这里的别名就是为了解决这个问题</p>
</li>
<li>
<p>描述</p>
<p>用于该账号的备注描述信息</p>
</li>
<li>
<p><strong>账号创建完成</strong></p>
</li>
</ul>
<p><img alt="image-20200331223556538" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200331223556538.png" /></p>
<p>系统提示新建成功后，我们就可以在列表中看到刚刚创建的账号记录了。</p><h1 id="2">2. 创建一个脚本</h1>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">无</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>前往 <strong>脚本管理</strong> 页面，点击「新建」按钮进入</li>
</ol>
<p><img alt="image-20201104204649565" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104204649565.png" /></p>
<ol>
<li>按照页面提示，填写完整的脚本相关内容</li>
</ol>
<p><img alt="image-20200407162627035" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407162627035.png" /></p>
<ol>
<li>点击提交，脚本创建完成</li>
</ol>
<p><img alt="image-20201104203648989" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104203648989.png" /></p>
<ol>
<li>点击脚本名进入查看脚本详情</li>
</ol>
<p><img alt="image-20201104203953385" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104203953385.png" /></p>
<ol>
<li>点击具体的版本号进入查看该版本的脚本内容以及版本日志</li>
</ol>
<p><img alt="image-20201104204111629" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104204111629.png" /></p>
<p>脚本的版本管理提供了类似 SVN 的版本管理功能，帮助用户有效的管理脚本的各个版本分支；关于版本各个状态的含义说明，详见脚本管理的功能介绍文档（传送门：<a href="../Features/Scripts.md">脚本管理功能介绍</a>）。</p>
<ol>
<li>将版本置为『<strong>已上线</strong>』状态，以供我们后面测试使用</li>
</ol>
<p><img alt="image-20201104204350624" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104204350624.png" /></p><h1 id="3">3. 执行脚本</h1>
<p>本文会讲解如何执行作业平台管理的、或者手动录入的脚本。</p>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">1. 业务下有可执行的服务器（Agent 状态正常）
2. 准备好系统执行账号（必备）
3. 准备好一个「已上线」的脚本（必备）</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>选择刚才我们创建的脚本示范执行，点击「<strong>去执行</strong>」按钮</li>
</ol>
<p><img alt="image-20201104205112651" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104205112651.png" /></p>
<ol>
<li>在页面上填入所需的执行参数和内容</li>
</ol>
<p><img alt="image-20200407192800545" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407192800545.png" /></p>
<ol>
<li>点击「<strong>去执行</strong>」即可开始在目标机器上执行该脚本</li>
</ol>
<p><img alt="image-20200407193241918" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407193241918.png" /></p><h1 id="4">4. 创建作业模板</h1>
<p>「作业」是用于组装一个或多个操作节点的流程统称，就像工厂的流水线作业一样，将几个需要的操作拼装到一个流程中，使其能够串联起来实现一键自动化执行。</p>
<p>在作业平台中，一个可执行的完整「作业」是由 <code>模板 + 执行方案</code> 组成的；模板提供的是通用、标准且统一模式化的完整样板，而执行方案则是从模板中根据场景需求而衍生出来的相应实体。</p>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">1. 业务下有可执行的服务器（Agent 状态正常）
2. 准备好系统执行账号（必备）
3. 准备好一个「已上线」的脚本（可选）</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>在 <code>作业</code> 页面中，点击 <strong>新建</strong> 进入</li>
</ol>
<p><img alt="image-20201104205455285" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20201104205455285.png" /></p>
<ol>
<li>按照表单中的要求输入作业的基础信息，和步骤内容</li>
</ol>
<p><img alt="image-20200407170537403" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407170537403.png" /></p>
<ol>
<li>设置 <code>name</code> 字符串，和 <code>target</code> 的主机列表变量，提供作业步骤中使用</li>
</ol>
<p>创建 <code>主机列表</code> 变量：</p>
<p><img alt="image-20200407170400057" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407170400057.png" /></p>
<p>创建 <code>字符串</code> 变量：</p>
<p><img alt="image-20200407170918316" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407170918316.png" /></p>
<ol>
<li>添加执行步骤，引用我们刚才建的脚本和变量做示例</li>
</ol>
<p>步骤一、引用刚才创建的脚本</p>
<p><img alt="image-20200407164025258" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407164025258.png" /></p>
<p>步骤二、直接写临时脚本，用上全局变量 <code>name</code></p>
<p><img alt="image-20200407171444377" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407171444377.png" /></p>
<p>步骤三、加个人工确认步骤，演示一下</p>
<p><img alt="image-20200407171536319" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407171536319.png" /></p>
<ol>
<li>最后点击 <code>提交</code> 按钮，保存作业模板；至此，作业模板就创建完毕</li>
</ol>
<p><img alt="image-20200407171643379" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407171643379.png" /></p>
<p>更多详尽的作业相关功能介绍，请前往 <a href="../Features/Jobs.md">作业管理功能说明</a> 。</p><h1 id="5">5. 创建执行方案</h1>
<p>作业「执行方案」是由模板衍生出来的实体对象，不同的执行方案通常用于面向不同的使用场景。</p>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">1. 业务下有可执行的服务器（Agent 状态正常）
2. 准备好系统执行账号（必备）
3. 准备好一个「已上线」的脚本（可选）
4. 准备好一个作业模板（必备）</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>进入刚才创建的作业模板，并点击 <code>选择方案</code> 前往创建或查看执行方案</li>
</ol>
<p><img alt="image-20200407172705035" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407172705035.png" /></p>
<ol>
<li>点击「新建执行方案」来创建一个全新的作业执行方案</li>
</ol>
<p><img alt="image-20200407172907623" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407172907623.png" /></p>
<ol>
<li>提交保存后，即可在列表中看到刚刚创建的执行方案</li>
</ol>
<p><img alt="image-20200407172941308" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407172941308.png" /></p><h1 id="6">6. 执行作业</h1>
<p>接下来将演示本次入门示例的最后一个步骤「执行作业」</p>
<h2 id="_1">前置条件</h2>
<pre class="codehilite"><code class="language-bash">1. 业务下有可执行的服务器（Agent 状态正常）
2. 准备好系统执行账号（必备）
3. 准备好一个「已上线」的脚本（可选）
4. 准备好一个作业模板（必备）
5. 准备好一个作业执行方案（必备）</code></pre>


<h2 id="_2">操作步骤</h2>
<ol>
<li>从刚才创建的执行方案页面中，点击「<strong>去执行</strong>」来触发执行动作</li>
</ol>
<p><img alt="image-20200407195149316" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407195149316.png" /></p>
<ol>
<li>执行前，还可以根据自己的需求场景来修改全局变量的值</li>
</ol>
<p><img alt="image-20200407195351347" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407195351347.png" /></p>
<ol>
<li>全局变量的值确认后，点击「<strong>执行</strong>」即可进入执行总览页面：</li>
</ol>
<p><img alt="image-20200407200026973" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407200026973.png" /></p>
<ol>
<li>点击单个步骤可查看该步骤的执行详情</li>
</ol>
<p><img alt="image-20200407200229158" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Quick-Starts/media/image-20200407200229158.png" /></p>
<p>至此~ 恭喜你，已掌握作业平台执行作业任务的技能！</p><h1 id="_1">如何实现在不同步骤间传递参数</h1>
<p>当我们的作业流程有多个步骤时，经常需要把某个步骤处理的结果值传递给下一个或后面的步骤使用；</p>
<p>例如，某个「配置巡检作业」的流程如下：</p>
<blockquote>
<ol>
<li>从分布式配置中心获取某 Server 当前分配在哪里（获取该 Server 的 IP 地址）</li>
<li>检查 Conf_Svr 是否可以正常访问该 Server 的服务端口</li>
<li>检查 Conf_Svr 与该 Server 之间的网络质量</li>
<li>前两步都检查通过的前提下，更改 Conf_Svr 配置文件中关联的字段指向该 IP</li>
<li>后面省略……</li>
</ol>
</blockquote>
<p>在上述案例示例中，核心需求是需要在第一个步骤能够正常获取到 Server 的 IP 地址，后面的步骤才能够正常运行；</p>
<p>接下来，我们通过「全局变量」来演示作业平台是如何满足这种需求场景的。</p>
<h2 id="_2">操作步骤</h2>
<ol>
<li>创建 <code>svr_addr</code> 字符串变量，并设置 <code>赋值可变</code></li>
</ol>
<p><img alt="image-20200504022002494" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504022002494.png" /></p>
<ol>
<li>在第一个步骤的脚本处理中获取对应值，并赋值给 <code>svr_addr</code> 变量</li>
</ol>
<p><img alt="image-20200504022148538" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504022148538.png" /></p>
<ol>
<li>在后续步骤中获取 <code>svr_addr</code> 变量值进行处理</li>
</ol>
<p><img alt="image-20200504022307497" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504022307497.png" /></p>
<ol>
<li>保存作业模板并创建执行方案</li>
</ol>
<p><img alt="image-20200504022521545" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504022521545.png" /></p>
<ol>
<li>运行该执行方案检验结果</li>
</ol>
<p><img alt="image-20200504022826017" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504022826017.png" /></p>
<h2 id="_3">结论</h2>
<p>如上图第 5 步，我们在第二个步骤的脚本逻辑里使用 ping 命令对 ${svr_addr} 进行网络监测，在实际的运行结果日志中也看到了变量值被正常传递过来了。</p>
<p>诸如此类的场景案例还有很多，希望通过该章节的示例能够帮助到你，感谢对蓝鲸作业平台的支持。</p><h1 id="_1">如何让同一主机独享变量</h1>
<p>当同一批主机在多个步骤间需要传递独立的变量值时，我们需要用到 <code>命名空间</code> 变量；它和 <code>字符串</code> 变量的差别是，<code>命名空间</code> 是以主机为唯一标识的独有变量，适合在主机处于多个步骤并需要透传属于自己变量值的场景使用；</p>
<p>下面我们列举一个简单的示例来演示 <code>命名空间</code> 类型变量的使用方式。</p>
<h2 id="_2">操作步骤</h2>
<ol>
<li>创建一个 <code>servers</code> 的主机变量，和一个 <code>hostname</code> 的命名空间变量</li>
</ol>
<p><img alt="image-20200504174826202" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504174826202.png" /></p>
<p><img alt="image-20200504174855980" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504174855980.png" /></p>
<ol>
<li>在第一个步骤获取主机名，并赋值给 <code>hostname</code>，执行目标选择 <code>servers</code></li>
</ol>
<p><img alt="image-20200504175053937" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504175053937.png" /></p>
<ol>
<li>在第二个步骤 echo <code>hostname</code>，执行目标同样选择 <code>servers</code></li>
</ol>
<p><img alt="image-20200504175243168" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504175243168.png" /></p>
<ol>
<li>执行作业，观察每台主机 echo 的结果是否是各自主机名</li>
</ol>
<p><img alt="image-20200504175411987" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504175411987.png" /></p>
<p>***.***.98.105 这台机器的变量值为 <code>jobdev-1</code></p>
<p><img alt="image-20200504175528762" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504175528762.png" /></p>
<p>而 ***.***.98.69 这台机器的变量值为 <code>jobdev-2</code></p>
<h2 id="_3">结论</h2>
<p>由此可见，同样的代码逻辑，由于使用的是 <code>命名空间</code> 变量，所以不同机器 echo 的结果是属于主机自身独有的变量值。</p>
<p>本章节介绍结束，希望通过该示例能够帮助到你，感谢对蓝鲸作业平台的支持。</p><h1 id="_1">使用内置函数实现执行结果分组功能</h1>
<p>在日常运维事务中，我们经常会碰到需要统计线上服务器信息的需求，常见的解决方案是在一台运维机上写 "处理登录机器并获取信息" 的脚本逻辑，然后逐台或者并发对多台机器执行，并把结果记录到文本中，最后再对文本进行排序或去重等处理来得出最终结果；而在蓝鲸作业平台中，可以通过内置函数 <code>job_succese</code> 轻松达到目的。</p>
<h2 id="_2">场景案例</h2>
<p>下面我们列举几个实际需求场景案例来演示：</p>
<h3 id="1">1. 检查所有机器是否存在重复主机名的问题</h3>
<ul>
<li>代码逻辑</li>
</ul>
<p><img alt="image-20200504182752953" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504182752953.png" /></p>
<ul>
<li>结果展示</li>
</ul>
<p><img alt="image-20200504183245205" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504183245205.png" /></p>
<p>在上图中我们会发现，<code>job_success</code> 方法会将 hostname 执行的结果相同的依次分组展示；红框中可见每个分组都只有 1 台主机，那么结论就是不存在 <strong>主机名重复</strong> 的问题。</p>
<h3 id="2">2. 检查线上机器的内存分布情况</h3>
<ul>
<li>代码逻辑</li>
</ul>
<p><img alt="image-20200504184143563" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504184143563.png" /></p>
<ul>
<li>结果展示</li>
</ul>
<p><img alt="image-20200504184308400" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504184308400.png" /></p>
<p>如上图所见，最终 4 台机器的内存分布分别有 <code>16G</code> <code>32G</code> 和 <code>64G</code> 三种；其中，<code>32G</code>内存的机器有两台。</p>
<h2 id="_3">结论</h2>
<p>诸如此类的 "对多台服务器的信息进行分组显示/统计" 场景还有很多，这里就不一一列举了；</p>
<p>希望通过上述示例可以帮助你了解蓝鲸作业平台的内置函数使用方法，感谢你的支持。</p><h1 id="_1">高危脚本如何及时处理避免影响扩大</h1>
<p>在使用开源软件时，经常会碰到由于某个漏洞被黑客发现并利用，导致可能造成业务的信息泄露等安全问题；通常在碰到高危的漏洞时，我们会立刻停止线上服务，紧急升级修复漏洞后再重新对外服务。同样的，当一个公共的脚本被发现有逻辑错误/漏洞时，我们不允许业务作业因为引用了该脚本而造成不可预知的故障/损失，希望能够第一时间制止！</p>
<p>在作业平台的脚本管理中，<code>禁用</code> 功能能够帮助你及时止损，将问题在大面积爆发前及时制止！下面将通过一个示例来演示，作业平台的脚本 <code>禁用</code> 功能是如何运作的。</p>
<h2 id="_2">操作步骤</h2>
<ol>
<li>创建一个业务脚本 <code>error_scene</code></li>
</ol>
<p><img alt="image-20200504024942856" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504024942856.png" /></p>
<ol>
<li>在作业 <code>最佳实践示例 - 演示脚本禁用功能</code> 的步骤中引用该脚本</li>
</ol>
<p><code>bash
   因为过程中我们需要切换去操作禁用脚本，所以第一步我们 sleep 30 seconds 来等待，以便配合演示需要</code></p>
<p><img alt="image-20200504025400870" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504025400870.png" /></p>
<ol>
<li>将被引用的脚本版本置为 <code>禁用</code> 状态</li>
</ol>
<p><img alt="image-20200504025729960" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504025729960.png" /></p>
<ol>
<li>观察作业的执行情况</li>
</ol>
<p><img alt="image-20200504030008312" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Best-Practices/media/image-20200504030008312.png" /></p>
<p>作业在被执行时，提示「引用的脚本版本已被禁用，无法执行」。</p>
<h2 id="_3">结论</h2>
<p>如上述演示案例，只要脚本的版本被置为 <code>禁用</code>，那么引用它的作业执行方案在运行时就会报错并终止执行，由此来及时防止有漏洞的脚本在线上被继续使用而导致严重故障。</p><h1 id="_1">平台首页</h1>
<p>作业平台的首页主要分为四大块，数据分析、数据统计、收藏的作业和近期执行历史；核心是让用户进入作业平台后能更全面的掌握业务的使用情况，更快的找到用户在这个场景下所需要的！</p>
<p><img alt="image-20200814103315021" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814103315021.png" /></p>
<ol>
<li>分析模块</li>
</ol>
<p>作业平台分析模块展示的信息分为两大类：<code>知识科普</code> 和 <code>配置巡检</code>。</p>
<p>「知识科普」展示的数据主要是在作业平台能力范畴内的一些常用的使用经验分享，其中包含一些在脚本领域的专家提供的经验传授；目的是希望通过这些知识能够让用户使用起来更加得心应手，帮助用户更高效的应对工作需求。</p>
<p>「配置巡检」展示的数据是作业平台定期对平台内所有的配置信息做异常检查的汇总信息，目的是希望运维在进入作业平台的第一时间，对业务的作业配置和执行情况能够了如指掌，防范于未然。</p>
<p>我们希望作业平台能够像一个运维脚本专家一样，在大家日常工作中给出一些有效的指导意见、建议，帮助用户提升效率，加强配置安全风险的防范意识。</p>
<ol>
<li>
<p>统计数据</p>
</li>
<li>
<p>Agent 状态分布</p>
<ul>
<li>展示当前业务的主机 Agent 状态分布情况，包括 <code>正常</code> <code>异常</code> 和 <code>未安装</code></li>
</ul>
</li>
<li>作业量<ul>
<li>展示当前业务下的作业模板总量</li>
</ul>
</li>
<li>
<p>脚本量</p>
<ul>
<li>展示当前业务下的脚本总量</li>
</ul>
</li>
<li>
<p>我收藏的作业</p>
</li>
</ol>
<p>显示用户在当前业务下所收藏的所有作业模板列表。</p>
<ol>
<li>最近执行记录</li>
</ol>
<p>显示当前业务最近的操作执行历史，还可以快速筛选跟当前用户执行相关的记录。</p>
<ul>
<li>点击「全部」会把最近执行的记录直接按执行时间倒序排列</li>
<li>点击「我执行」则显示执行人为当前用户的最近执行记录</li>
<li>点击「更多」则跳转到「执行历史」页面查看更多执行历史数据</li>
</ul><h1 id="_1">快速执行脚本</h1>
<p>快速执行脚本提供的使用场景是针对需要快速执行的一次性任务，并且可能会反复调整脚本逻辑来执行得到用户想知道的结果，类似于在终端跳板机 Console 执行的效果。</p>
<p><img alt="image-20200814114010369" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114010369.png" /></p>
<ul>
<li>任务名称</li>
</ul>
<p>本次脚本执行的任务名称，方便后续在执行历史中有迹可循</p>
<ul>
<li>脚本来源</li>
</ul>
<p>可以通过两种方式来提供本次执行的脚本内容： <code>手工录入</code> 和 <code>脚本引用</code> </p>
<ul>
<li>「手工录入」即用户直接在当前页面的脚本编辑器内写脚本内容<ul>
<li>在脚本编辑框右上角提供了 <code>本地上传</code> <code>历史缓存</code> 和 <code>全屏展示</code> 功能</li>
</ul>
</li>
<li>
<p>「脚本引用」则是支持从脚本管理或公共脚本库中，引用已有的脚本来执行</p>
<ul>
<li>引用的脚本内容不可编辑</li>
</ul>
</li>
<li>
<p>脚本内容</p>
</li>
</ul>
<p>展示当前手工录入或引用的脚本内容区域，支持的脚本语言有：<code>Shell</code> <code>Bat</code> <code>Perl</code> <code>Python</code> <code>Powershell</code> <code>SQL</code></p>
<ul>
<li>脚本参数</li>
</ul>
<p>脚本执行时传入的参数，同脚本在终端执行时的传参格式，如：<code>./test.sh xxxx xxx xxx</code></p>
<p><code>敏感参数</code> 功能支持将脚本参数屏蔽，在参数信息较敏感时，该选项就派上了用场。</p>
<ul>
<li>超时时长</li>
</ul>
<p>本次脚本执行的超时设置，当脚本执行超过该时间后将会自动关闭，结果被视为 "执行超时"</p>
<ul>
<li>执行账号</li>
</ul>
<p>选择脚本执行的目标服务器相关的账号，如 Linux 系统的 <code>root</code> 或者 Windows 系统的 <code>Administrator</code></p>
<ul>
<li>目标服务器</li>
</ul>
<p>从蓝鲸配置平台中获取执行的目标服务器，支持通过 <code>拓扑选择IP</code> <code>手动输入IP</code> <code>拓扑选择节点</code> 和 <code>动态分组</code> 的方式选择</p>
<p>为了能够满足需要反复调参执行的使用场景，页面上还提供了快捷查看近 5 次执行记录的功能：</p>
<p><img alt="image-20200814114205720" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114205720.png" /></p><h1 id="_1">快速分发文件</h1>
<p>与「快速执行脚本」功能提供的使用场景相同，快速分发文件的目的也是为了让需要进行一次性传输文件的用户，可以在这里快速的执行并得到结果。</p>
<p><img alt="image-20200814113435056" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814113435056.png" /></p>
<ul>
<li>任务名称</li>
</ul>
<p>分发文件的任务名，方便后续在执行历史中有迹可循</p>
<ul>
<li>超时时长</li>
</ul>
<p>分发文件的超时设置，当文件传输时间超过时将会自动关闭，结果被视为 "执行超时"</p>
<ul>
<li>上传 / 下载限速</li>
</ul>
<p>由于蓝鲸管控平台 Agent 默认的配置是会根据服务器带宽和资源使用情况进行限制的，防止出现因为执行的任务导致拖垮业务的机器；所以当用户自己确认机器允许更大限度传输时，通过开启限速设置可以提高传输的速率</p>
<ul>
<li>源文件</li>
</ul>
<p>分发的源文件选择，支持选择 <code>本地文件</code> 或 <code>服务器文件/目录</code></p>
<ul>
<li>目标路径</li>
</ul>
<p>文件分发到目标服务器的绝对路径地址</p>
<ul>
<li>传输模式</li>
</ul>
<blockquote>
<p><code>严谨模式</code>：严谨判断目标路径是否存在！若不存在，任务将自动终止。</p>
<p><code>强制模式</code>：不论目标路径是否存在，都将强制按照用户指定的目标路径进行传输（不存在会自动创建）。</p>
<p><code>保险模式</code>：避免因源文件或目标机器有同名时被覆盖，为了安全起见，将自动在目标路径后面追加源 IP 目录。</p>
</blockquote>
<ul>
<li>执行账号</li>
</ul>
<p>文件分发的目标服务器相关的账号，如 Linux 系统的 <code>root</code> 或者 Windows 系统的 <code>Administrator</code></p>
<ul>
<li>目标服务器</li>
</ul>
<p>从蓝鲸配置平台中获取执行的目标服务器，支持通过 <code>静态-IP选择</code> <code>动态-拓扑选择</code> <code>动态-分组选择</code> 和 <code>手动输入</code> 的方式选择</p>
<p>同样的，为了满足需要反复传输文件的使用场景，页面上提供了快捷查看近 5 次文件分发记录的功能：</p>
<p><img alt="image-20200814113544356" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814113544356.png" /></p><h1 id="_1">作业管理</h1>
<p>「作业」是蓝鲸作业平台的核心能力之一！它的理念是：通过流程编排能力，将运维操作场景中涉及到的多个脚本执行或文件分发步骤组合成一个作业模板，这个作业模板尽可能把场景相关的共性逻辑都包含进去，然后再根据实际使用场景衍生出相应的执行方案，那么作业模板和执行方案的关系即为 "一对多"。</p>
<h2 id="_2">作业列表</h2>
<p><img alt="image-20200814111919827" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814111919827.png" /></p>
<p>作业列表页支持按 <code>标签</code> 进行分类管理，使不同场景的作业模板得以很好的收纳起来，便于查找；标签的管理支持在表格中直接添加/编辑，非常方便！除此之外，对于自己关注的作业模板还可以添加个人收藏，后续从首页就能很方便的快速进入。</p>
<h2 id="_3">创建作业模板</h2>
<p><img alt="image-20200814112312543" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112312543.png" /></p>
<p>作业模板由 “基础信息 / 全局变量 / 作业步骤” 3 部分组成：</p>
<ol>
<li>
<p>基础信息</p>
</li>
<li>
<p>模板名称</p>
<p>设置作业模板的名称</p>
</li>
<li>
<p>场景标签</p>
<p>设置作业模板使用场景的分类标签</p>
</li>
<li>
<p>模板描述</p>
<p>备注跟作业模板使用相关的详细描述</p>
</li>
<li>
<p>全局变量</p>
</li>
</ol>
<p><img alt="image-20200814112345391" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112345391.png" /></p>
<ul>
<li>
<p>变量类型</p>
<ul>
<li>字符串</li>
</ul>
<p>普通的字符串类型变量，没有使用限制，可跨主机或跨步骤共享使用</p>
<ul>
<li>命名空间</li>
</ul>
<p>它的作用如其名，变量在不同主机有自己的命名空间，主机之间不会相互影响</p>
<ul>
<li>主机列表</li>
</ul>
<p>主机列表主要用于多个步骤都是对同一批执行对象时而设置的，方便批量同步和管理</p>
<ul>
<li>密文</li>
</ul>
<p>作业平台产品层对密文类型变量做了加密处理，保护其隐私性，不会以明文形式外显</p>
</li>
<li>
<p>变量名称</p>
<p>即变量的使用名称，遵循 Linux 操作系统对变量的命名规范</p>
</li>
<li>
<p>默认值</p>
<p>设置了变量的默认值后，该模板衍生的执行方案会默认带上，但执行方案也可以单独进行修改</p>
</li>
<li>
<p>变量描述</p>
<p>用于标注该变量的用途、作用等详细描述信息</p>
</li>
<li>
<p>其他</p>
<ul>
<li>赋值可变</li>
</ul>
<p>表示该变量的值可以在任一步骤中被改变</p>
<ul>
<li>必填</li>
</ul>
<p>表示该变量在作业执行前必须填写，不能为空</p>
</li>
<li>
<p>作业步骤</p>
</li>
</ul>
<p><img alt="image-20200814112445236" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112445236.png" /></p>
<ul>
<li>
<p>步骤类型</p>
<p>当前一共有 3 种步骤类型，分别为：<code>执行脚本</code> <code>分发文件</code> 和 <code>人工确认</code></p>
</li>
<li>
<p>步骤名称</p>
<p>用于表示该步骤的具体作用</p>
</li>
<li>
<p>步骤内容</p>
<p><code>执行脚本</code> 和 <code>分发文件</code> 的步骤内容与快速执行方式相同，这里不再重复介绍；</p>
<p><code>人工确认</code> 的步骤类型是作业中独有的，特别详解一下：</p>
<p><img alt="image-20200416215621771" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200416215621771.png" /></p>
<ul>
<li>确认人</li>
</ul>
<p>填写该确认步骤的实际干系人，不在确认人名单中的其他人员是无法执行确认操作的！</p>
<ul>
<li>通知方式</li>
</ul>
<p>选择当运行到该步骤时，以什么方式发送消息通知 "确认人"</p>
<ul>
<li>确认描述</li>
</ul>
<p>备注一些在当前执行场景中，需要确认人 Check 的事项，描述清楚需要确认的点。</p>
</li>
<li>
<p>错误处理</p>
<p>当步骤执行失败时，如果勾选了 <code>自动忽略错误</code> 流程将会忽略失败并继续向下执行</p>
</li>
</ul>
<h2 id="_4">模板调试</h2>
<p><img alt="image-20201104215029611" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20201104215029611.png" /></p>
<p>作业模板的「<strong>调试</strong>」功能是专门为模板所属人在变更模板逻辑后需要调试而设计的，调试模式中的作业内容会与作业模板完全保持一致，而无需像作业执行方案那样需要同步才能到最新状态。</p>
<h2 id="_5">生成执行方案</h2>
<p><img alt="image-20200814112802354" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112802354.png" /></p>
<p>作业模板创建完后，即可以从模板中创建出一或多个根据场景需求定制的「<strong>执行方案</strong>」；每个执行方案可以从模板中勾选自己所需的步骤，修改全局变量的变量值。</p>
<p><font color=red>重要！执行方案除了可以勾选步骤和修改全局变量值以外，不可修改步骤顺序、不可修改步骤内容、不可删除全局变量。</font></p>
<h2 id="_6">运行执行方案</h2>
<p><img alt="image-20200814112859466" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112859466.png" /></p>
<p>选择自己所需的执行方案，点「<strong>去执行</strong>」前往执行页面；对于设置了全局变量的执行方案，会先进入全局变量的确认页面，在该页面下，用户可以按照自己的需求场景修改填入对应的变量值，确认后再点执行即可。</p>
<p><img alt="image-20200814112635432" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814112635432.png" /></p>
<p>开始执行后，就可以看到任务的整体执行情况，包括任务当前的进度、耗时、状态等信息；点击某个步骤可以进入查看步骤的执行明细：</p>
<p><img alt="image-20200814113020363" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814113020363.png" /></p>
<p>在步骤执行详情页中，可以查看每一台目标服务器的执行耗时、返回码、结果日志等信息；除此之外，还提供了一些辅助功能，可以帮助用户查看跟该步骤相关的配置、步骤信息，包括操作记录。</p>
<h2 id="_7">导入 / 导出</h2>
<p><img alt="image-20200814115348178" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115348178.png?lastModify=1604498806" /></p>
<p>从列表中勾选需要导出的作业模板，并点击 <code>导出</code> 按钮将其导出。</p>
<h3 id="_8">导出流程</h3>
<p><img alt="image-20200814115437296" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115437296.png?lastModify=1604498806" /></p>
<p>流程如下：<code>用户须知</code> -&gt; <code>导出内容确认</code> -&gt; <code>导出设置</code> -&gt; <code>开始导出</code></p>
<ol>
<li>用户须知</li>
</ol>
<p>作业的导出/导入会有一些既定的规则，在导入/导出的第一步 <code>用户须知</code> 中有详细描述，第一次使用请详细阅读。</p>
<ol>
<li>导出内容确认</li>
</ol>
<p><img alt="image-20200814115852221" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115852221.png?lastModify=1604498806" /></p>
<p>在这个步骤中，用户可以自定义选择需要导出的作业执行方案，而无需全部导出。</p>
<ol>
<li>导出设置</li>
</ol>
<p><img alt="image-20200814115930036" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115930036.png?lastModify=1604498806" /></p>
<p>主要是对导出的压缩包一些常规基础和安全设置；</p>
<ul>
<li>
<p>压缩包名</p>
<p>支持自定义设置导出的文件压缩包名称</p>
</li>
<li>
<p>密文变量值处理</p>
<p>当导出的作业中包含 <code>密文</code> 类型的变量时，这里可以设置是否将密文原值导出，也可选择不导出</p>
</li>
<li>
<p>文件加密</p>
<p>设置密码后，在导入时需要输入正确的密码</p>
</li>
<li>
<p>文件有效期</p>
<p>选择文件压缩包的导入有效期，超过有效期将不可再被导入</p>
</li>
<li>
<p>开始导出</p>
</li>
</ul>
<p><img alt="image-20200814120230138" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814120230138.png?lastModify=1604498806" /></p>
<p>该步骤将正式开始执行作业导出动作，导出任务完成后会自动弹出文件保存本地的弹窗，如果丢失可点击 <code>重新下载文件</code> 再次下载。</p>
<h3 id="_9">导入流程</h3>
<p><img alt="image-20200814120411092" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814120411092.png?lastModify=1604498806" /></p>
<p>流程如下：<code>用户须知</code> -&gt; <code>文件包上传</code> -&gt; <code>导入内容确认</code> -&gt; <code>导入设置</code> -&gt; <code>开始导入</code></p>
<ol>
<li>用户须知</li>
</ol>
<p>作业的导出/导入会有一些既定的规则，在导入/导出的第一步 <code>用户须知</code> 中有详细描述，第一次使用请详细阅读。</p>
<ol>
<li>文件包上传</li>
</ol>
<p><img alt="image-20200814120535291" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814120535291.png?lastModify=1604498806" /></p>
<p>点击上传文件压缩包后，如果后台检测到文件经过加密，将会自动弹出密码输入框，需填写正确密码才可继续导入</p>
<ol>
<li>导入内容确认</li>
</ol>
<p><img alt="image-20200814120853617" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814120853617.png?lastModify=1604498806" /></p>
<p>在这个步骤中，用户可以按需选择需要导入的作业模板或执行方案，而无需全部导入。</p>
<ol>
<li>导入设置</li>
</ol>
<p><img alt="image-20200814120943052" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814120943052.png?lastModify=1604498806" /></p>
<ul>
<li>
<p>重名后缀</p>
<p>当导入的作业模板名称已经存在时，会按照这个设置自动追加后缀名称</p>
</li>
<li>
<p>作业 ID 处理</p>
<p>选择导入后对作业模板 ID 的处理</p>
</li>
<li>
<p>开始导入</p>
</li>
</ul>
<p><img alt="image-20200814121110012" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814121110012.png?lastModify=1604498806" /></p>
<p>该步骤将正式开始作业导入任务，导入过程中可以点击日志中的链接及时查看已导入成功的作业信息。</p><h1 id="_1">作业模板的操作流程和逻辑关系</h1>
<p>下面的逻辑流程图详细标注了作业模板和执行方案的逻辑关系，以及作业执行过程中的操作流程信息。</p>
<p><img alt="作业模板操作流程逻辑图" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/作业模板操作流程逻辑图.jpg" /></p>
<p>几个比较重要关键的点：</p>
<ul>
<li><code>调试</code> 与作业模板是 <strong>强同步</strong> 关系</li>
<li>一旦修改了模板的变量属性或步骤内容，都会与执行方案产生差异，需要同步才能保持一致</li>
<li><code>强制终止</code> 是针对 "整个任务" 的，而非 "单个步骤"</li>
<li>执行方案的变量值可以自定义，不会因为跟模板的同步而改变</li>
<li>人工确认步骤只有 <code>确认人</code> 可以进行相关操作</li>
</ul><h1 id="_1">脚本管理</h1>
<p>「脚本管理」提供业务管理维护脚本的功能，包括脚本的引用关系、版本日志、版本上下线/对比等等；本章节为大家介绍脚本管理的相关功能和逻辑关系。</p>
<p><img alt="image-20200814114345580" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114345580.png" /></p>
<h2 id="_2">引用关系维护</h2>
<p>作业模板的步骤中可以选择引用业务脚本，所以在脚本列表中的「被引用」一列可以显示出各脚本的被引用关系。</p>
<p><img alt="image-20200814114432347" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114432347.png" /></p>
<h2 id="_3">新建脚本</h2>
<p>从列表页的「新建」按钮进入脚本新建页面：</p>
<p><img alt="image-20200814114518565" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114518565.png" /></p>
<ul>
<li>脚本名称</li>
</ul>
<p>为这个脚本起一个能直观表达它的用途的名字</p>
<ul>
<li>场景标签</li>
</ul>
<p>脚本使用场景的标签分类（同作业标签）</p>
<ul>
<li>描述</li>
</ul>
<p>脚本的使用指引或功能说明的明细备注</p>
<ul>
<li>版本号</li>
</ul>
<p>用于区分脚本的不同版本的标识（类似 Github 的 version）</p>
<ul>
<li>脚本内容</li>
</ul>
<p>当前版本的脚本内容</p>
<p>按照要求填写必要的参数内容后，点击提交即可完成新脚本的创建：</p>
<p><img alt="image-20201015171015966" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20201015171015966.png" /></p>
<h2 id="_4">脚本的版本管理</h2>
<p>版本管理提供了版本的新建/编辑、上/下线、禁用、代码对比等功能，帮助用户有序维护脚本的诸多版本。</p>
<p><img alt="image-20200814114727436" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114727436.png" /></p>
<ul>
<li>
<p>版本的状态</p>
</li>
<li>
<p>未上线</p>
<p>新建的版本默认处于该状态，可以反复编辑修改，相当于草稿状态</p>
</li>
<li>
<p>已上线</p>
<p>上线后脚本才可以去执行或者被作业引用，而一旦版本上线后，只能通过复制并新建来克隆出新的版本号</p>
</li>
<li>
<p>已下线</p>
<p>在已有 <code>已上线</code> 版本的前提下，点击其他版本上线后会将原线上版本置为 <code>已下线</code>，但不影响已引用的使用</p>
</li>
<li>
<p>禁用</p>
<p>置为 <code>已禁用</code> 后，该版本将不可用！线上已引用了该版本的都将「不可执行」！（安全功能）</p>
</li>
<li>
<p>版本对比</p>
</li>
</ul>
<p>勾选任意两个版本后，可以通过该功能比对代码的差异</p>
<p><img alt="image-20200814114746918" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114746918.png" /></p><h1 id="_1">定时任务</h1>
<p>作业除了可以直接执行以外还支持定时执行，定时任务功能就是用来管理定时执行的作业任务；除此之外，由于定时场景的特殊性无法即时获取到执行结果反馈，所以引入了 <code>周期成功率</code> 的统计方法，帮助用户确认循环执行过程中有哪些任务出现了执行失败的问题。</p>
<p><img alt="image-20201015160704024" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20201015160704024.png" /></p>
<h2 id="_2">定时任务列表</h2>
<ul>
<li>
<p>任务名称</p>
</li>
<li>
<p>定时任务的名称</p>
</li>
<li>
<p>执行方案名称</p>
</li>
<li>
<p>定时任务关联的作业执行方案名称</p>
</li>
<li>
<p>执行策略</p>
</li>
<li>
<p>定时的策略，<code>周期执行</code> 显示表达式，<code>单次执行</code> 显示执行时间</p>
</li>
<li>
<p>更新人</p>
</li>
<li>
<p>最近一次编辑该任务的人</p>
</li>
<li>
<p>更新时间</p>
</li>
<li>
<p>最近一次编辑该任务的时间</p>
</li>
<li>
<p>最新执行结果</p>
</li>
<li>
<p>最近一次该任务执行的结果</p>
</li>
<li>
<p>周期成功率</p>
</li>
</ul>
<p><img alt="image-20200424104633465" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200424104633465.png" /></p>
<ul>
<li>
<p>定时任务的周期执行成功比率，使用户能更直观的看出定时任务的最近执行情况，若成功率非 100%，鼠标 hover 后会显示出失败的任务信息；由于执行的周期有长短差异、单/多次之分，所以成功率的计算公式会随着用户定义的不同类型表达式进行匹配对应，规则如下：</p>
<ul>
<li><code>周期性 且 时间间隔 ≤ 1小时</code>的，计算公式为：</li>
</ul>
<p><code>最近24小时成功次数 / 最近24小时执行总次数 * 100</code>相当于<code>60*24=最近1440次成功次数 / 1440 * 100</code> </p>
<ul>
<li>除此之外，<code>一次性</code>或者<code>周期性 且 时间间隔 ≥ 2小时</code>的，计算公式为：<code>最近10次的成功次数 / 10 * 100</code></li>
</ul>
</li>
<li>
<p>操作</p>
</li>
<li>
<p>开关</p>
<p>开启 / 关闭定时任务</p>
</li>
<li>
<p>编辑</p>
<p>编辑定时任务的配置</p>
</li>
<li>
<p>删除</p>
<p>删除对应的定时任务</p>
</li>
<li>
<p>执行记录</p>
<p>查看对应定时任务的执行记录</p>
</li>
</ul>
<h2 id="_3">新建定时任务</h2>
<p>点击列表页左上角的「<strong>新建</strong>」按钮可以创建新的定时任务</p>
<p><img alt="image-20200814102924304" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814102924304.png" /></p>
<ul>
<li>任务名称</li>
</ul>
<p>定时任务的名称（根据定时执行的场景设置一个有辨识度的名称）</p>
<ul>
<li>
<p>执行策略</p>
</li>
<li>
<p>单次执行</p>
<p>就像闹钟一样，设置一个未来时间点，任务只会在那个时间点触发执行一次</p>
</li>
<li>
<p>周期执行</p>
<p>采用了和 Linux Crontab 同样的表达式，让使用门槛更低，上手更容易</p>
</li>
<li>
<p>作业模板</p>
</li>
</ul>
<p>选择定时执行的任务所属作业模板</p>
<ul>
<li>执行方案</li>
</ul>
<p>从已选作业模板中设置一个执行方案</p><h1 id="_1">执行历史</h1>
<p>执行历史页面显示的是对应业务下的所有历史执行任务，包括通过页面执行、定时执行和 API 调用等渠道触发的任务；并提供对历史任务进行「<strong>重做</strong>」的便捷入口，满足用户想要对某个历史任务重复执行的需求。</p>
<p><img alt="image-20200814103042034" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814103042034.png" /></p>
<ul>
<li>任务 ID</li>
</ul>
<p>每条历史执行任务的 ID 是唯一的，如果已经有明确已知的 ID，可以直接通过 ID 搜索定位到对应的任务</p>
<ul>
<li>任务名称</li>
</ul>
<p>任务名称是可以重名的，因为同一个场景可能会执行多次，同名可以帮助用户归类同一个场景的执行记录</p>
<ul>
<li>执行方式</li>
</ul>
<p>表示任务是通过哪种渠道触发执行的，渠道来源有：<code>页面执行</code> <code>定时执行</code> 和 <code>API 调用</code></p>
<ul>
<li>任务类型</li>
</ul>
<p>表示任务的操作类型，包含：<code>作业执行</code> <code>脚本执行</code> 和 <code>文件分发</code></p>
<ul>
<li>任务状态</li>
</ul>
<p>表示任务当前的状态，包含如下列表：</p>
<ul>
<li>
<p>等待执行</p>
<p>表示任务未开始，处于等待状态；（出现的场景可能是队列中的任务过多，任务正在排队）</p>
</li>
<li>
<p>正在执行</p>
<p>表示任务当前正常执行中</p>
</li>
<li>
<p>执行成功</p>
<p>表示任务已经执行成功（自动/手动忽略错误处理的任务也归为该状态）</p>
</li>
<li>
<p>执行失败</p>
<p>表示任务执行失败（步骤中有任一服务器执行失败了，都会视为执行失败）</p>
</li>
<li>
<p>等待用户</p>
<p>表示人工确认步骤，正在等待用户确认操作</p>
</li>
<li>
<p>强制终止中</p>
<p>表示用户触发了 <code>强制终止</code> 动作，当前正在强制终止的流程中</p>
</li>
<li>
<p>强制终止成功</p>
<p>表示用户 <code>强制终止</code> 的指令执行成功了</p>
</li>
<li>
<p>执行人</p>
</li>
</ul>
<p>任务执行人的名字</p>
<ul>
<li>开始时间</li>
</ul>
<p>表示任务开始执行的时间点</p>
<ul>
<li>耗时时长</li>
</ul>
<p>表示任务执行所消耗的时长</p><h1 id="_1">账号管理</h1>
<p>账号管理功能提供用户按不同业务来存储管理不同类型的 OS 执行账号；当然，如果企业内部已有相应的“账号管理系统”（如铁将军系统），那么这里的账号就需要用户根据实际情况进行配置使用；因为作业平台自身并不会直接关联服务器操作系统上的账号鉴权模块，这里仅提供账号的配置维护管理。</p>
<p><img alt="image-20200814102538748" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814102538748.png" /></p>
<h2 id="_2">创建账号</h2>
<p>点击表格上方的「<strong>新建</strong>」按钮创建一个新的服务器账号：</p>
<p><img alt="image-20200814102702005" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814102702005.png" /></p>
<ul>
<li>用途</li>
</ul>
<p>选择对应的账号使用对象，如 <code>系统账号</code> <code>数据库账号</code></p>
<ul>
<li>类型</li>
</ul>
<p>根据不同的对象，选择相应的账号类型</p>
<ul>
<li>系统账号支持的类型：<code>Linux</code> <code>Windows</code></li>
<li>
<p>数据库账号支持的类型：<code>MySQL</code> <code>Oracle</code> <code>DB2</code></p>
</li>
<li>
<p>名称</p>
</li>
</ul>
<p>账号的实际名称，即在服务器操作系统上的真实名称，如 <code>root</code> <code>user00</code></p>
<ul>
<li>别名</li>
</ul>
<p>账号的别名，在出现同名账号的情况下更需要</p>
<ul>
<li>密码</li>
</ul>
<p>服务器账号的密码，如 Windows 操作系统的 Administrator 密码</p>
<ul>
<li>确认密码</li>
</ul>
<p>对密码做二次确认</p>
<ul>
<li>描述</li>
</ul>
<p>填写该账号的适用场景或应用对象的备注描述</p><h1 id="_1">消息通知</h1>
<p>消息通知设置功能帮助用户能够更及时的掌握任务的执行状态，支持根据不同的任务类型选择不同的通知方式给到特定的对象。</p>
<p><img alt="image-20200814113218287" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814113218287.png" /></p>
<ul>
<li>操作渠道有 <code>页面执行</code> <code>API 调用</code> <code>定时任务</code> 三种</li>
<li>通知的配置是按个人维度保存的</li>
<li>通知对象可选择作业平台内置的角色（如<code>任务执行人</code>）和业务自身的角色（如 <code>业务运维</code> <code>开发人员</code>）</li>
<li>通知对象的人员选择受 <code>全局设置</code> 中的通讯黑名单限制</li>
<li>通知方式的渠道来自于 <code>全局设置</code> 的设置</li>
</ul><h1 id="_1">公共脚本</h1>
<p>公共脚本的功能和业务下的脚本管理是完全相同的，区别只是公共脚本面向的是平台全局的，而业务脚本面向的是单个业务，两者的使用对象维度不同。</p>
<p><img alt="image-20200814114309792" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114309792.png" /></p>
<p>功能介绍请参考 <a href="./Scripts.md">脚本管理</a></p>
<p>公共脚本提供的使用场景是，针对企业内部需要提炼一些通用的脚本提供给业务直接使用，统一由公共脚本维护者来管理/审核，例如：</p>
<ul>
<li>公司/部门的系统运维组提供一些通用的服务器初始化脚本</li>
<li>公司/部门的 DBA 团队提供一些针对数据库通用场景的处理逻辑脚本，如 MySQL 安装、调优等等</li>
<li>公司/部门的配置管理岗提供一些通用的业务共性配置逻辑检查流程的脚本</li>
<li>诸如此类，等等...</li>
</ul><h1 id="ip">IP 白名单</h1>
<p>由于作业平台中业务之间是逻辑隔离的，即用户只能执行指定业务下关联的脚本/作业或主机，不允许资源或目标是跨业务的；但当用户是平台业务维护场景时，就需要跨业务传文件/执行任务，这是就需要将业务外的主机加入 IP 白名单来实现。（该功能未来会通过配置平台的「业务集」来提供，届时 IP 白名单功能会在迁移后下架）</p>
<p><img alt="image-20200814111758048" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814111758048.png" /></p>
<h2 id="ip_1">新建 IP 白名单</h2>
<ul>
<li>业务</li>
</ul>
<p>该白名单生效的业务范围（多选）</p>
<ul>
<li>云区域</li>
</ul>
<p>选择对应的云区域</p>
<ul>
<li>IP</li>
</ul>
<p>输入白名单的 IP 列表</p>
<ul>
<li>备注</li>
</ul>
<p>提供注明该条记录的用途说明</p>
<ul>
<li>生效范围</li>
</ul>
<p>选择该条记录的操作生效范围，即作业平台的原子能力：<code>脚本执行</code> 和 <code>文件分发</code></p><h1 id="_1">全局设置</h1>
<p>全局设置提供了面向平台管理员的管理/维护功能，该页面下的功能核心是作用于整个平台的，如平台内所有业务的可选消息发送渠道、作业平台的历史数据存储策略、等等...</p>
<p><img alt="image-20200814114815248" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114815248.png" /></p>
<ul>
<li>通知设置</li>
</ul>
<p>设置作业平台内所有业务/用户可选的消息通知渠道、模板和对象</p>
<p><code>bash
  「通讯黑名单」的使用场景：每个企业都会有一些高层、特殊敏感人员是跟业务不相关的，为了避免业务运维在设置任务的消息通知对象时误操作配置了这些敏感用户，所以提供了黑名单功能来避免出现这种问题。</code></p>
<ul>
<li>账号命名规则</li>
</ul>
<p>不同企业可能会对 OS 有定制化或规范上的特殊需求，比如 A 企业修改了 Linux 内核，调整了 useradd 时的账号命名规则；或者，B 企业要求公司所有账号命名规范必须是 <code>xxxxxx</code> ；为了满足这种同一功能但不同定制化需求的场景，我们将账号的命名规则通过页面可配置化的方式，提供给企业作业平台管理员自定义设置。</p>
<p><img alt="image-20200814115142252" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115142252.png" /></p>
<ul>
<li>高危语句规则</li>
</ul>
<p>为了规避运维操作人员在脚本里误写入一些高危的命令，如 <code>rm -rf /</code> 这种删除服务器根目录的严重错误！我们提供了高危语句的自定义配置功能，企业可以按照自己的场景需要，通过正则的方式按不同脚本类型进行配置。</p>
<p><img alt="image-20200814115124927" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814115124927.png" /></p>
<ul>
<li>平台信息</li>
</ul>
<p>提供企业可定制化的平台信息显示功能，其中包含作业平台的网页标签 Title 文案、Footer 信息等等...</p>
<p><img alt="image-20200814114958704" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/Features/media/image-20200814114958704.png" /></p><h1 id="v3-v2">作业平台 V3 和 V2 有什么差异</h1>
<p>作业平台 V3 新版除了在系统架构上全面采用「微服务」模式设计以外，在产品功能和体验上也实现了全面的提升！同样，产品架构和规划上也更突显了平台能力的方向和定位，持续深化 <code>脚本执行</code>  <code>文件分发</code> 这两个核心原子能力。</p>
<table><tbody>
<tr style="font-weight:bold;"><td width="18%" ></td><td width="41%">    Job-v2 旧版   </td><td width="41%">   Job-v3 新版   </td></tr>
<tr><td style="vertical-align:middle;"> 脚本执行    </td><td style="vertical-align:middle;">    支持 Shell / Bat / Perl / Python / PowerShell </td><td style="vertical-align:middle;">    支持 Shell / Bat / Perl / Python / PowerShell / SQL   </td></tr>
<tr><td>    文件分发    </td><td>   不支持限速、不支持超时设置   </td><td>   支持超时、支持限速<br/>支持不同的传输模式 </td></tr>
<tr><td rowspan="2" style="vertical-align:middle;"> 作业模板    </td><td rowspan="2" style="vertical-align:middle;">    「模板+作业实例」整合模式，通过「全局变量」方式统一配置和管理步骤所需的参数和主机，作业模板和实例的关系是「一对一」，每次执行需要从模板中勾选对应的步骤来执行。    </td><td>   纯模板，不可执行；使用「全局变量」的方式来统一配置和管理步骤所需的参数和主机，通过生成「执行方案」来管理不同场景的作业实例；作业模板和实例的关系是「一对多」。 </td></tr>
<tr><td>    步骤顺序变更、步骤增删，以及步骤的任意参数/内容修改（包括脚本的不同版本变更），都会使模板与执行方案产生差异！ </td></tr>
<tr><td rowspan="3" style="vertical-align:middle;"> 执行方案    </td><td rowspan="3" style="vertical-align:middle;">    -   </td><td>   Job v3中作业的执行态改名为「作业执行方案」，由模板衍生的作业实例，一个真正可执行的作业对象；模板有改动时，由执行方案来选择是否同步来自模板的变更。    </td></tr>
<tr><td>    执行方案无法修改步骤的参数和执行目标，统一通过给「全局变量」的不同赋值来区分。 </td></tr>
<tr><td>    执行方案同步时，可以对比与模板的差异明细。   </td></tr>
<tr><td rowspan="4" style="vertical-align:middle;"> 脚本管理    </td><td>   业务脚本 和 公共脚本（全局） </td><td>   业务脚本 和 公共脚本（全局） </td></tr>
<tr><td style="vertical-align:middle;"> 一个脚本内可以有多个版本同时处于可用  </td><td style="vertical-align:middle;">    一个脚本内只能有一个版本处于「线上版」，即新创建的作业只能引用该版本（但存量的作业已引用旧的版本不受影响）；脚本版本状态支持「禁用」，禁用的脚本会完全不可用！用于在紧急或安全风险场景下，快速止损！ </td></tr>
<tr><td style="vertical-align:middle;"> 不支持查询作业引用方  </td><td>   支持反向查询作业引用方 </td></tr>
<tr><td> - </td><td>支持版本对比</td></tr>
<tr><td rowspan="4" style="vertical-align:middle;"> 主机选择方式  </td><td>   手工录入    </td><td>   手工录入    </td></tr>
<tr><td style="vertical-align:middle;"> 拓扑选择主机  </td><td>   拓扑选择主机 </td></tr>
<tr><td style="vertical-align:middle;"> -   </td><td>   拓扑选择动态节点    </td></tr>
<tr><td style="vertical-align:middle;"> 动态分组    </td><td>   动态分组    </td></tr>
<tr><td>    定时任务    </td><td>   Quartz后台 + 自带表达式    </td><td>   Quartz后台 + 类Linux原生Cron表达式  </td></tr>
<tr><td>    账号管理    </td><td>   面向全业务管理 </td><td>   按业务维度管理 </td></tr>
<tr><td>    消息通知    </td><td>   支持对作业执行人自己的执行成功、失败和等待确认状态的消息通知  </td><td>   支持灵活配置对任意业务角色或人员进行执行成功、失败状态的消息通知    </td></tr>
<tr><td>    高危语法检测  </td><td>   -   </td><td>   支持按脚本类型配置高危语句提醒规则   </td></tr>
<tr><td>    IP 白名单  </td><td>   支持  </td><td>   支持（不变）  </td></tr>
<tr><td rowspan="5" style="vertical-align:middle;"> 全局设置    </td><td>   -   </td><td>   支持消息通知渠道和模板的配置  </td></tr>
<tr><td style="vertical-align:middle;"> -   </td><td>   存储策略配置 </td></tr>
<tr><td style="vertical-align:middle;"> -   </td><td>   账号命名规则配置    </td></tr>
<tr><td style="vertical-align:middle;"> -   </td><td>   按脚本类型支持高危语句规则配置 </td></tr>
<tr><td style="vertical-align:middle;"> --  </td><td>   支持个性化配置平台信息 </td></tr>
<tr><td>    CMDB数据同步机制  </td><td>   延迟定时拉取  </td><td>   通过事件订阅，秒级同步 </td></tr>
</tbody></table><h1 id="_1">作业模板和执行方案的同步逻辑是怎样的</h1>
<p>如果你了解了蓝鲸作业平台，就知道作业执行方案是由作业模板衍生出来的可执行实例；</p>
<p>那么修改作业模板哪些内容会导致执行方案与其产生不同步呢？而模板修改哪些地方不会影响执行方案呢？</p>
<p>本章节将为大家详细讲解作业平台中模板和执行方案同步逻辑的 3 大要点：</p>
<h3 id="1">1. 修改模板的基础信息，不会导致执行方案产生不同步</h3>
<p><img alt="image-20201015171458835" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/FAQs/media/image-20201015171458835.png" /></p>
<h3 id="2">2. 修改模板的全局变量初始值和描述，也不会导致执行方案产生不同步</h3>
<p><img alt="image-20201015171608662" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/FAQs/media/image-20201015171608662.png" /></p>
<h3 id="3">3. 除此之外，修改任何其他内容都会导致执行方案不同步</h3>
<p>核心包括以下几个关键内容：</p>
<ul>
<li>调整步骤的顺序</li>
<li>增 / 减作业步骤</li>
<li>修改步骤内的任何字段值</li>
<li>增 / 减全局变量</li>
<li>修改除默认值和描述以外的其他变量相关字段值</li>
</ul><h1 id="_1">为什么作业平台的脚本只允许存在一个 "线上" 版本</h1>
<p>作业平台的脚本版本管理设计思路大致与开发者写代码时用 Github 管理版本类似，新版本的更迭目的是为了提升或优化老版本的处理逻辑/性能，本质上每次新版本应该做到 <strong>向下兼容</strong>。</p>
<p>但唯一不同的是，脚本本身就是面向一个特定需求场景的，如果中间因为新特性的加入会导致无法向下兼容的话，这时就代表着脚本原本的使命改变了，那么我们推崇的处理方式是，通过另起一个新脚本来管理；这样做一来能够让原本的脚本还是保持着它所解决的需求场景的能力，二来能够时脚本管理起来更清晰明了，我们不希望在脚本的版本管理功能上做得过于复杂或令用户有沉重的管理负担。</p>
<blockquote>
<p>小 Tips：<code>复制并新建</code> 的版本可以反复编辑修改，不会产生冗余的草稿版本，直至版本上线。</p>
</blockquote><h1 id="_1">脚本的版本被下线了，是否会影响引用方的使用</h1>
<p>脚本的版本更迭是很正常的场景，毕竟不是每个脚本第一次写完就是完美的；那么，当线上作业已经引用的版本被改为 <code>已下线</code> 状态后，是否会影响使用方的正常使用呢？</p>
<blockquote>
<p>答案是：<strong>不会！只要不是被置为 <code>已禁用</code> 状态，都不会影响引用方使用</strong></p>
</blockquote>
<p>顺便说明下，<a href="../FAQs/why-script-only-allow-one-online-version.md">为何作业平台的脚本只允许存在一个版本是线上状态？</a></p><h1 id="_1">任务耗时、步骤耗时和执行耗时，各代表什么含义</h1>
<p>作业平台的一个任务内包含 3 种不同含义的耗时时间，分别为 <code>任务耗时</code> <code>步骤耗时</code> 和 <code>执行耗时，</code>三者之间的关系是 “任务耗时 包含 步骤耗时 包含 执行耗时”。</p>
<p>本章节将为大家说明这三种耗时时间所代表的具体含义：</p>
<h3 id="1">1. 任务耗时</h3>
<p>“任务耗时” 指的是一个完整的快速执行或作业任务的执行总耗时时长，是由作业平台的 任务执行引擎 计算产生的，计算方式是：<code>任务内所有相关的步骤处理时长总和 + 引擎自身的运行逻辑耗时</code>。</p>
<pre class="codehilite"><code class="language-bash">特殊说明：在 &quot;人工确认&quot; 步骤停滞的时间也会算到任务耗时内</code></pre>


<p><img alt="image-20201015143725300" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/FAQs/media/image-20201015143725300.png" /></p>
<h3 id="2">2. 步骤耗时</h3>
<p>“步骤耗时” 指的是作业任务内单个步骤的执行耗时时长，是由作业平台的 任务执行引擎 计算产生的；因为单个步骤内可能会有多台执行主机，所以步骤耗时的计算方式是：<code>引擎自身的运行逻辑耗时 + (步骤内所有主机执行的最早开始时间 - 最晚结束时间)</code> 。</p>
<p><img alt="image-20201015144027743" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/FAQs/media/image-20201015144027743.png" /></p>
<h3 id="3">3. 执行耗时</h3>
<p>“执行耗时” 指的是单个步骤内，具体某一台目标服务器的实际执行耗时，由于命令执行或文件分发最终是由 GSE 实施，所以该耗时取值来自于 GSE Server 执行完任务后返回的 startTime 和 endTime 差值。</p>
<p><img alt="image-20201015144145804" src="F:\v_awjliu\BKDocs\ZH/6.0/作业平台/产品白皮书/FAQs/media/image-20201015144145804.png" /></p>
    </body>
    </html>
    